a git repository library manager
 ██████╗ ██╗████████╗███████╗████████╗ ██████╗ ██╗    ██╗
██╔════╝ ██║╚══██╔══╝██╔════╝╚══██╔══╝██╔═══██╗██║    ██║
██║  ███╗██║   ██║   ███████╗   ██║   ██║   ██║██║ █╗ ██║
██║   ██║██║   ██║   ╚════██║   ██║   ██║   ██║██║███╗██║
╚██████╔╝██║   ██║   ███████║   ██║   ╚██████╔╝╚███╔███╔╝
 ╚═════╝ ╚═╝   ╚═╝   ╚══════╝   ╚═╝    ╚═════╝  ╚══╝╚══╝

Clone it. Stow it. Never lose it.

You clone repos to learn from them. Then they rot in ~/misc-stuff-2. gitstow turns them into a library: paste a URL, get an organized collection you can bulk-pull, tag, freeze, and grep. And your AI agents already know how to drive it.

$ pipx install "gitstow[ui]"
Star on GitHub ↗
MIT · Python 3.10+ · GitHub / GitLab / Bitbucket / Codeberg
quick start

Sixty seconds to a stowed library.

One install, one onboard, and every repo you paste lands exactly where it belongs.

$ {{ tabCmd }}
$ gitstow onboard # optional first-run wizard, installs the Claude skill too
$ gitstow add anthropic/claude-code # shorthand or full URLs
$ gitstow pull # update everything, in parallel
$ gitstow ui # open the dashboard ↓
gitstow — demo
gitstow CLI demo
live capture: add, pull, status, done
gitstow ui

The tab you leave open.

A local-first browser dashboard, and the primary way to live with your library. Dirty state at a glance, one-click pulls, tags, freezes, and per-file diffs. It auto-refreshes every 30 seconds and never phones home: 127.0.0.1 only.

gitstow library.mgr · v0.2.6
Library Workspaces Settings
Jul 21 — Dashboard
Your library.
44 repos across 2 workspaces, 41 in sync.
38 clean 03 local changes 02 behind 01 frozen
All workspaces ▾ Search repos, tags… Hide frozen ↻ Refresh ⟳ Fetch all + Add repo ↓ Pull all
StatusRepositoryWorkspaceBranchRemote ΔTagsLast pullActions
{{ r.num }} {{ r.statusLabel }} {{ r.name }} {{ r.ws }} {{ r.branch }} {{ r.delta }} {{ t }} {{ r.lastPull }} {{ r.pullLabel }}
auto-refresh 30s · click repo name → details · pull runs in place
live127.0.0.1:7853 Shutdown
local-first
Binds 127.0.0.1 only. Your repos, your machine, nobody else's business.
pull all, in parallel
One click updates the whole library with a per-repo summary. Frozen repos politely skipped.
per-file diffs
Click into any dirty repo: staged, unstaged, untracked, with colored line diffs.
ai integration

Your agents just… know.

Onboarding installs a Claude Code skill automatically. From then on, "add this repo" or "update my library" just works. No configuration, no prompt engineering, no ceremony.

1
Skill installs itself
Part of gitstow onboard, auto-updates on version bumps.
2
Zero token overhead
Skills cost nothing when inactive, unlike MCP tools that squat in context.
3
MCP for everything else
Cursor, Claude Desktop, and friends get a server via pip install gitstow[mcp]. Every command speaks --json.
claude code
grab karpathy/nanoGPT and tag it ai
⏺ Using skill: gitstow
⏺ Bash(gitstow add karpathy/nanoGPT)
✓ cloned → ~/oss/karpathy/nanoGPT
⏺ Bash(gitstow repo tag karpathy/nanoGPT ai)
✓ tagged: ai
Stowed. It's in your oss workspace under karpathy/nanoGPT, tagged ai.
features

Everything a library needs.

{{ f.glyph }}
{{ f.title }}
{{ f.body }}
{{ f.cmd }}
vs the field

The best of both. Then some.

ghq organizes but can't operate. gita operates but can't organize. gitstow does both, and brings a dashboard and your agents along.

capability gitstow ghq gita
{{ c.label }} {{ c.gitstow }} {{ c.ghq }} {{ c.gita }}
● yes · ◐ partial · — no   (ghq 3.5k★, gita 1.8k★, both great at what they do)

Stop losing repos.
Start stowing them.

Your future self — and your agents — will thank you.

$ pipx install "gitstow[ui]"